#列表-初始
import random

# 1. 创建一个列表`list1`，其包含元素 1, 2, 3, 4, 5。
# list1=[1,2,3,4,5,6,7,8]
# 2. 向`list1` 添加一个元素 6。
# list1.append(6)
# print(list1)
#
# list1.insert(1,"1")
# print(list1)
#
# list1.extend([True,{1,2}])
# print(list1)

# list2=[6]
# list1=list1+list2
# print(list1)

# 3. 从`list1` 中删除元素 3。
# list1.remove(3)
# print(list1)
#
# list1.pop(2)#这里的数字是索引值
# print(list1)
#
# del list1[2:3]#切片
# print(list1)


# 4. 修改`list1` 中的第二个元素值为 8。
# list1[1]=8
# print(list1)

# 5. 找出`list1` 中值为 8 的元素索引。
# index=list1.index(8,0,5)
# print(index)
# 6. 遍历`list1`，打印每个元素的值。
# for x in list1:
#     print(x,end=' ')

# 7. 利用循环，将一个新列表 `7, 8, 9]` 的每个元素添加到`list1` 的末尾。
# list2=[7,8,9]
# for x in list2:
#    list1.append(x)
# print(list1)

# 8. 使用一个命令，将列表 `10, 11, 12]` 添加到`list1` 的末尾。
# list1=list1+[10,11,12]
# print(list1)
# 9. 使用切片操作，获取`list1` 第三个元素到第五个元素（包含第五个元素）。
# print(list1)
# print(list1[2:5])

# 10. 将`list1` 的第三个元素修改为两个新元素 `13, 14]`（不是列表中的一个列表，而是将两个新元素插入到指定位置）。
# print(list1)
# list1[2:3]=[13,14]
# print(list1)


#列表练习题-进阶
#
# # 给定初始列表`my_list = [3, "apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]`，执行以下操作：
# my_list = [3, "apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]
# # 1. 向my_list中添加一个元素"fig"。
# print(my_list)
# my_list.append("fig")
# print(my_list)
#
# # 2. 从my_list中删除元素"banana"。
# my_list.remove("banana")
# print(my_list)
#
# # 3. 将元素7修改为字符串"grape"。
# my_list[6]="graoe"
# print(my_list)
#
# # 4. 查找并打印元素"cherry"的索引值。
# index=my_list.index("cherry")
# print(index)
# print(my_list)
#
#
# # 5. 遍历my_list并打印每个元素。
# for i in my_list:
#     print(i,end=" ")
#
#
# # 6. 在"cherry"后面插入新元素"kiwi"。
# index=my_list.index("cherry")
# my_list.insert(index+1,"kiwi")
# print(my_list)
# # 7. 使用索引查找并打印第三个元素。
# print(my_list[2])
#
# # 8. 使用负数索引找到并打印倒数第二个元素。
# print(my_list)
# print(my_list[-1:-3:-1])
# # 9. 使用切片操作获取第三个至第七个元素并打印结果。
# print(my_list[2:7])
# # 10. 使用切片操作反转整个列表并打印结果。
# print(my_list[::-1])
#

# # 11. 对列表中的字符串进行排序，并保留数字在原位。
# my_list = [3, "apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]
# str_list=[x for x in my_list if isinstance(x,str)]
#
#
# # 冒泡排序
# def bubble_str(str_list):
#     n=len(str_list)
#     for i in range(n):
#         swapped = False
#         for j in range(0,n-i-1):
#             if len(str_list[j]) > len(str_list[j+1]):
#                 #交换位置
#                 str_list[j],str_list[j+1]=str_list[j+1],str_list[j]
#                 swapped=True
#         if not swapped:
#             break
#     return str_list
#
# print(str_list)
# bubble_str(str_list)
# print(str_list)
# print(my_list)
#
# result=[]
# str_index=0
# for x in my_list:
#     if isinstance(x,str):
#         result.append(str_list[str_index])
#         str_index+=1
#     else:
#         result.append(x)
#
# print(result)
#



# 12. 将my_list中的数字替换为它们对应的字符串形式（如1->'one'），不改变列表中原有的字符串。
# print(my_list)
# num_to_str = {
#     0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
#     5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'
# }
#
# for x in my_list:
#     if x in num_to_str:
#         index=my_list.index(x)
#         my_list[index]=num_to_str[x]
#     else:continue
# print(my_list)


# 列表练习题-复杂
# 1. 创建一个列表包含从1到100的所有偶数。
#方法一：

# for i in range(1,101):
#     if i%2==0:
#         even.append(i)
#     else:continue
# print(even)
# even=list(range(2,101,2)) #range(2, 101)左闭右开
# print(even)
#
# # 2. 将上述列表中所有偶数替换为它们的平方。
# result=[]
# for x in even:
#     a=x*x
#     result.append(a)
# print(result)
#
# # 3. 从上述列表中删除所有大于1000的数字。
#
# result=[x for x in result if x<1000]
# print(result)
# # 4. 将列表逆序。
# print(result[::-1])
# # 5. 使用切片操作取出列表中的前10个元素。
# result=[x for x in result[0:10]]
# print(result)
# # 6. 将一个新列表`[101, 102, 103]`加到现有列表的末尾。
# a=result+[101,102,103]
# print(a)
# # 7. 计算列表中元素的平均值。
# sum=0
# for x in a :
#     sum=sum+x
# avg=sum/len(a)
# print(sum)
# print(avg)
#
# # 8. 找到列表中的最大值和最小值。
# a.sort()
# max=a[len(a)-1]
# min=a[0]
# print(a)
# print(max,min)


# 9. 找出列表中第一次出现的11的索引位置。
a=[1,11,2,22,3,33,1,11,11,22,25]
# index=a.index(11)
# print(index)
# result=[]
# 10. 用循环遍历列表，把每个数字替换为其对应的字符形式（例如：1替换为'1'）。注意使用不同类型的循环来实现。
# for x in a:
#     result.append(f"{x}")
# print(result)

# 11. 将列表中的所有元素转换成浮点数形式。
# for x in a:
#     result.append(float(x))
# print(result)
# 12. 找出列表中所有大于50的元素个数。
# result=[x for x in even if x>50]
# print(len(result))
# print(result)
# 13. 在列表的第3个位置插入数字99。
# print(a)
# a.insert(2,99)
# print(a)
# 14. 删除列表中的最后一个元素。

# print(a)
# a.pop()
# print(a)
# 15. 使用列表推导式创建一个新列表，包含原列表中每个数字乘以2的结果。
a=[x*2 for x in a]
print(a)
# 16. 将列表分成两部分，一部分是小于等于50的数，另一部分是大于50的数。
# less=[]
# than=[]
# for x in a:
#     if x >= 50:
#         than.append(x)
#     else:
#         less.append(x)
# print(f"小于{less}")
# print(f"大于{than}")
# 17. 将列表转换为一个字典，其中列表元素作为键，其在列表中的索引作为值。
# my_list = [1, 2, 'c', 'b']
# result = {}
# for index,element in enumerate(my_list):
#     result[element]=index
# print(result)
# 18. 使用`enumerate`函数遍历列表，并打印元素及其索引。
for index,element in enumerate(a):
    print(index,element)
# 19. 从列表中随机取出一个元素。
random.choice(a)
print(random.choice(a))
# 20. 将列表保存到一个txt文件里，每个元素占一行。
# 打开文件，并以 w 模式写入内容
file = open("example.txt", "w")
# 写入内容到文件
for x in a:
    file.write(str(x)+"\n")
# 关闭文件
file.close()


# 使用 with 语句，自动关闭文件
with open("example1.txt", "w") as file:
    for x in a:
        file.write(str(x) + "ge"+"\n")
